var path = require('path');
var webpack = require('webpack');
var WebpackIsomorphicToolsPlugin = require('webpack-isomorphic-tools/plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var autoprefixer = require('autoprefixer');

var projectRootPath = path.resolve(__dirname, '../');
var assetsPath = path.resolve(projectRootPath, './static/dist');

// 在生产环境中，不需要使用开发服务器来提供资源，而是直接将其打包到静态资源目录，然后在页面中引入入口文件即可。
// 当然，Webpack的配置也与开发环境不同.

module.exports = {
  // devtool设置为source-map，这种模式构建速度非常慢，但是会生成完整的源代码映射，适用于生产环境。
  devtool: 'source-map',
  context: projectRootPath,
  // 在入口文件列表中去除了热替换文件，在bootstrap后面添加了extractStyles，用于提取出独立的文件。Font Awesome的配置文件和客户端入口都发生了变化。
  entry: [
    'bootstrap-loader/extractStyles',
    'font-awesome-loader!./src/theme/font-awesome/font-awesome.config.prod.js',
    './build/client'
  ],
  output: {
    path: assetsPath,
    filename: '[name]-[chunkhash].js',
    chunkFilename: '[name]-[chunkhash].js',
    // output.publicPath从开发服务器的服务路径改为了/dist/，代表资源文件从前端服务器中加载。
    publicPath: '/dist/'
  },
  progress: true,
  plugins: [
    // 插件列表增加了ExtractTextPlugin，用于提取样式文件
    new ExtractTextPlugin('[name]-[chunkhash].css', { allChunks: true }),
    // 添加了 DedupePlugin 和 UglifyJsPlugin 用于去重和压缩。
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      }
    }),
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: '"production"'
      },
      __SERVER__: false
    }),
    new WebpackIsomorphicToolsPlugin(require('./webpack-isomorphic-tools'))
    //...
    //去除了HotModuleReplacementPlugin插件，取消了Webpack同构工具的开发模式。
  ],
  module: {
    loaders: [
      { test: /\.(jpeg|jpg|png|gif)$/, loader: 'url-loader?limit=10240' },
      {
        test: /\.css$/,
        loader: ExtractTextPlugin.extract(
          'style',
          'css?modules&importLoaders=1&localIdentName=[name]__[local]__[hash:base64:5]' +
          '!postcss'
        )
      },
      {
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract(
          'style',
          'css?modules&importLoaders=2&localIdentName=[name]__[local]__[hash:base64:5]' +
          '!postcss' +
          '!sass'
        )
      },
      {
        test: /\.woff2?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
        loader: "url?limit=10000"
      },
      {
        test: /\.(ttf|eot|svg)(\?[\s\S]+)?$/,
        loader: 'file'
      }
    ]
  },
  postcss: [autoprefixer({ browsers: ['last 2 versions'] })]
};
